perm filename SAVRES.SAI[SYS,HE]5 blob
sn#060872 filedate 1973-08-30 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 SAVRES - save and restore procedures
C00005 00003 _ FILESP, EDSAVE
C00007 00004 _ EDREST
C00011 00005 _ LISAVE
C00013 00006 _ LIREST
C00015 00007 _ PRSAVE
C00020 00008 _ PRREST
C00023 00009 _ GETLINES
C00025 00010 _ OUTLINES
C00027 ENDMK
C⊗;
COMMENT SAVRES - save and restore procedures
used at will, and automatically in the expansion/contraction schemes;
ENTRY FILESP,EDSAVE,EDREST,LISAVE,LIREST,PRSAVE,PRREST;
BEGIN "SAVRES"
DEFINE CL="'15&'12",
BL="'40",
_="COMMENT",
QRETURN="BEGIN UNTELL; RETURN END",
LOOP(I,J,K,L)="FOR I←J STEP L UNTIL K DO",
QEP="EXTERNAL SIMPLE PROCEDURE",
QEIP="EXTERNAL SIMPLE INTEGER PROCEDURE",
QESP="EXTERNAL SIMPLE STRING PROCEDURE",
QER="ERR←1",
QI="INTEGER",
QS="STRING",
SAFEX="SAFE";
STRING A, C, EDFILE, EDPPN, PRFILE, PRPPN, LIFILE, LIPPN;
INTEGER BRAK1, BRK2, IMAN, NEP, KICH;
INTERNAL STRING B, JUNKSTR;
INTERNAL INTEGER DCHAN, EO, IG;
EXTERNAL INTEGER IDUM,IA,IB,IC,IE,WHERE,BRCHAR,NOEPA,NOL,MAXNOL,
NOBAL,MAXNOV,NOUT,X,Y,ERR,MAXPLS,MAXPVS,NPRO,MXNPRO,PLTOT,
PLFTOT,PCFTOT,PFTOT,PFFREE,MAXPLT,PFREE,NOV,NOEPL;
EXTERNAL STRING NAME,EDEXT,LIEXT,PREXT;
EXTERNAL REAL RDEP;
SAFEX INTEGER ARRAY LIM[1:4];
SAFEX REAL ARRAY TFORM[1:15,1:3];
SAFEX EXTERNAL STRING ARRAY PNAME[1:1];
SAFEX EXTERNAL INTEGER ARRAY LE,LEDG1,LEDG2,LCREDE,LVERSI,LVERCO,LVER,
LINK,PLINES,PVERTS,PPTRL,PLINEF,PLINE,PLINE2,PFLST,PFPRO,PFEAT[1:1],
PFPTR[0:1],DICH[0:15];
SAFEX EXTERNAL REAL ARRAY EAX,EAY,EBX,EBY,XVCOR,YVCOR,SVANG,XLCOR,YLCOR,
CXL,CYL,CCL,RLEN,ANGARG[1:1];
QEP UNTELL;
QESP PL(QS S,T; QI I);
QEP TELL(QS S);
QESP QREAD;
QEP SORTED;
QEP SHUFFL;
QEIP LACT(QI I);
_ FILESP, EDSAVE;
_ Reads in file, ext, ppn for (I=1) line-, (I=2) edge-,
(I=3) prototype files;
INTERNAL SIMPLE PROCEDURE FILESP(INTEGER I);
BEGIN "FILESP"
JUNKSTR←QREAD;
A←SCAN(JUNKSTR,2,BRK2);
B←IF (IA←BRK2)='56 THEN IA&SCAN(JUNKSTR,2,BRK2) ELSE NULL;
C←IF BRK2='133 THEN BRK2&JUNKSTR ELSE NULL;
CASE I OF BEGIN ;
BEGIN LIFILE←A; LIEXT←B; LIPPN←C END;
BEGIN EDFILE←A; EDEXT←B; EDPPN←C END;
BEGIN PRFILE←A; PREXT←B; PRPPN←C END
END
END "FILESP";
_ Saves sorted edge-data;
INTERNAL SIMPLE PROCEDURE EDSAVE;
BEGIN "EDSAVE"
IF ¬NOEPA THEN RETURN;
TELL("edge-save");
OPEN(4,"DSK",'14,0,2,IDUM,BRCHAR,EO);
IF EQU(EDEXT,".TEM") THEN BEGIN EDFILE←"EDSAVE"; EDPPN←NULL END;
ENTER(4,EDFILE&EDEXT&EDPPN,IA);
WORDOUT(4,NOEPA);
WORDOUT(4,KICH);
ARRYOUT(4,TFORM[1,1],45);
WORDOUT(4,RDEP);
ARRYOUT(4,LE[1],NOEPA);
ARRYOUT(4,EAX[1],NOEPA);
ARRYOUT(4,EAY[1],NOEPA);
ARRYOUT(4,EBX[1],NOEPA);
ARRYOUT(4,EBY[1],NOEPA);
RELEASE(4);
UNTELL
END "EDSAVE";
_ EDREST;
_ Inputs edge-files;
INTERNAL SIMPLE PROCEDURE EDREST;
BEGIN "EDREST"
LABEL BA1,EDP,EDPV,EDOUT,EDPV1,EDPV2;
REAL X,Y,DX,DY;
IF WHERE≠11 THEN TELL("edge-input") ELSE GO EDP;
IF EQU(EDEXT,".DAT") THEN IMAN←0 ELSE
IF EQU(EDEXT,".EDG") THEN IMAN←1 ELSE
IF EQU(EDEXT,".SED") THEN IMAN←2 ELSE
IF EQU(EDEXT,".TEM") THEN
BEGIN
IF ¬NOEPA THEN RETURN;
IMAN←3
END ELSE BEGIN
OUTSTR("WRONG EXT: "&EDEXT&CL);
QER;
QRETURN
END;
OPEN(4,"DSK",12*(IMAN%2),2,0,IDUM,BRAK1,EO);
LOOKUP(4,JUNKSTR←EDFILE&EDEXT&EDPPN,IA);
IF IA THEN
BEGIN
OUTSTR("FILE "&JUNKSTR&" NOT FOUND"&CL);
RELEASE(4);
QER;
QRETURN
END;
IF IMAN≤2 THEN NOL ← NOV ← 0;
CASE IMAN OF BEGIN
BEGIN
RDEP←REALIN(4);
NOEPA←(NEP←INTIN(4))%2;
LOOP(IA,1,4,1) LIM[IA]←INTIN(4)
END;
BEGIN
INTIN(4);
NEP←2*(NOEPA←INTIN(4)-1);
RDEP←REALIN(4)/4.0
END;
BEGIN NEP←2*(NOEPA←WORDIN(4)); GO EDPV1 END;
BEGIN IA←WORDIN(4); GO EDPV1 END
END;
IF NOEPL<NOEPA THEN BEGIN WHERE←11; RETURN; END;
EDP: IF IMAN THEN GO EDPV;
IC←0;
LOOP(IA,1,NEP,1)
BEGIN "EDIN"
IB←INTIN(4);
IF IA MOD 2 THEN
BEGIN
IC←IC+1;
EAX[IC]←(IB%10000000)/10;
EAY[IC]←(IB%1000 MOD 10000)/10
END ELSE BEGIN
EBX[IC]←(IB%10000000)/10;
EBY[IC]←(IB%1000 MOD 10000)/10
END
END "EDIN";
GO EDOUT;
EDPV: IF IMAN≥2 THEN GO EDPV2;
IC←0;
BA1: IE←REALIN(4);
IG←REALIN(4);
REALIN(4);
REALIN(4);
LOOP(IA,1,IE,1)
BEGIN
X←REALIN(4);
Y←REALIN(4);
DX←REALIN(4);
DY←REALIN(4);
EAX[IC←IC+1]←X-DY*RDEP;
EAY[IC]←256.-(Y+DX*RDEP);
EBX[IC]←X+DY*RDEP;
EBY[IC]←256.-(Y-DX*RDEP);
END;
IF IG THEN GO BA1;
KICH←INTIN(4);
LOOP(IA,1,KICH,1) LOOP(IC,1,3,1) TFORM[IA,IC]←REALIN(4);
RDEP←RDEP*2.;
GO EDOUT;
EDPV1: KICH←WORDIN(4);
ARRYIN(4,TFORM[1,1],45);
ARRYIN(4,RDEP,1);
IF IMAN=2∧NOEPL<NOEPA THEN BEGIN WHERE←11; RETURN; END;
EDPV2: ARRYIN(4,LE[1],NOEPA);
ARRYIN(4,EAX[1],NOEPA);
ARRYIN(4,EAY[1],NOEPA);
ARRYIN(4,EBX[1],NOEPA);
ARRYIN(4,EBY[1],NOEPA);
EDOUT: IF IMAN≤1 THEN SORTED;
IF IMAN≤2 THEN DICH[2]←DICH[3]←1;
IF IMAN=3 THEN RENAME(4,NULL,0,IA);
RELEASE(4);
UNTELL
END "EDREST";
_ LISAVE;
_ Saves data-structure on line-level;
INTERNAL SIMPLE PROCEDURE LISAVE;
BEGIN "LISAVE"
INTEGER IA,IB,IC,ID;
DEFINE AML(X)="ARRYOUT(IA,X[1],NOL)";
DEFINE AMV(X)="ARRYOUT(IA,X[1],ID)";
DEFINE AMC(X)="ARRYOUT(IA,X[1],NOV)";
DEFINE WD(X)="WORDOUT(IA,X)";
IF ¬NOL THEN RETURN;
TELL("line-save");
SHUFFL;
ID←2*NOL;
IF IC←EQU(LIEXT,".TEM") THEN BEGIN LIFILE←"LISAVE";LIPPN←NULL END;
OPEN(IA←GETCHAN,"DSK",'14,0,2,IDUM,IB,EO);
ENTER(IA,LIFILE&LIEXT&LIPPN,IB);
IF ¬IC THEN BEGIN WD(NOL);WD(NOV); END;
AML(LEDG1);
AML(LEDG2);
AML(LCREDE);
AMC(LVERSI);
AMV(LVERCO);
AMV(LVER);
AMV(LINK);
AMC(XVCOR);
AMC(YVCOR);
AMV(SVANG);
AMV(XLCOR);
AMV(YLCOR);
AML(CXL);
AML(CYL);
AML(CCL);
AML(RLEN);
AML(ANGARG);
RELEASE(IA);
UNTELL
END "LISAVE";
_ LIREST;
_ Restores datastructure as saved by LISAVE;
INTERNAL SIMPLE PROCEDURE LIREST;
BEGIN "LIREST" LABEL ON1;
INTEGER IB,IC,ID;
DEFINE AML(X)="ARRYIN(DCHAN,X[1],NOL)";
DEFINE AMV(X)="ARRYIN(DCHAN,X[1],ID)";
DEFINE AMC(X)="ARRYIN(DCHAN,X[1],NOV)";
DEFINE WD(X)="X←WORDIN(DCHAN)";
IF (IC←EQU(LIEXT,".TEM"))∧¬NOL THEN RETURN;
ID←2*NOL;
IF WHERE=8 THEN GO ON1;
TELL("line-restore");
OPEN(DCHAN←GETCHAN,"DSK",'14,2,0,IDUM,IB,EO);
LOOKUP(DCHAN,JUNKSTR←LIFILE&LIEXT&LIPPN,IB);
IF IB THEN
BEGIN
OUTSTR("FILE "&JUNKSTR&" NOT FOUND"&CL);
RELEASE(DCHAN);
QER;
QRETURN
END;
IF IC THEN GO ON1;
WD(NOL);
WD(NOV);
IB ← NOBAL;
NOBAL←NOL;
IF NOL>IC THEN BEGIN WHERE←8;RETURN; END;
ON1: AML(LEDG1);
AML(LEDG2);
AML(LCREDE);
AMC(LVERSI);
AMV(LVERCO);
AMV(LVER);
AMV(LINK);
AMC(XVCOR);
AMC(YVCOR);
AMV(SVANG);
AMV(XLCOR);
AMV(YLCOR);
AML(CXL);
AML(CYL);
AML(CCL);
AML(RLEN);
AML(ANGARG);
IF IC THEN RENAME(DCHAN,NULL,0,ID);
RELEASE(DCHAN);
UNTELL
END "LIREST";
_ PRSAVE;
_ Stores current prototype data-structure on DSK;
INTERNAL SIMPLE PROCEDURE PRSAVE;
BEGIN "PRSAVE"
INTEGER IA,IB,IC,ID,IE,IG;
IF ¬NPRO THEN RETURN;
TELL("prot-save");
IF IC←EQU(PREXT,".TEM") THEN BEGIN PRFILE←"PRSAVE";PRPPN←NULL END;
OPEN(IA←GETCHAN,"DSK",0,0,2,IDUM,BRAK1,EO);
ENTER(IA,PRFILE&PREXT&PRPPN,IB);
IF ¬IC THEN OUT(IA,"Number of prototypes: "&CVS(NPRO)&CL&CL&
"Max number lines/prot: "&CVS(MAXPLS)&
" vertices/prot: "&CVS(MAXPVS)&CL&CL&
"Total number of lines: "&CVS(PLTOT)&CL&CL&
"Total number of line-features: "&CVS(PLFTOT)&CL&CL&
"Total number of compound features: "&CVS(PCFTOT)&CL&CL&
"Feat.-to-prot. free storage ptr: "&CVS(PFFREE)&CL&CL&
"Prot-c.f.-pairs free storage ptr: "&CVS(PFREE)&
CL&CL&CL&CL);
OUT(IA,"LIST OF PROTOTYPES"&CL&CL&CL&"* * * * * * *"&CL&CL);
LOOP(ID,1,NPRO,1)
BEGIN
OUT(IA,"Prototype number: "&CVS(ID)&CL&CL&
"["&PNAME[ID]&"]"&CL&CL&
CVS(PLINES[ID])&" lines "&CVS(PVERTS[ID])&
" vertices. "&"Storage ptr: "&
CVS(PPTRL[ID])&CL&CL&@↓`bIl4(HJ>VQDJ¬2BbA
3'v) 2
baEA%5α1!
fK;∃76+πSW⊗)↓#?∨#π1%∩b
11∪)%_4PH$&BbA
≠↔∂#WK∃εK⊃ 2∀a1EUJ04($HJB1!∀≠K?O~kK↔≠/∪↔;∂*↓#?∂&1% d∩11IBI%l4PH&2>⎇↓"&∃c 2B2Lr⊗NnL"u1EHh($$L∩⊗≡&ph($$LzVQ"L 2∞14~1~BbB∞ZMDJ∃%2∀a1e%KX4($HJN⊗R4zJ6ε"A5EIc⊃%l4PH$&>-!"&¬eα1"∞4zM"BdJ:⊗~\J≡}&*ZBBR∀bn&∩jiFu%d∩11I∩I_4(HH%↓↓α↓↓↓α∧a"∞Z⎇→"B2Lr∃JnL:u%2∀a1IAJ04($HI↓↓↓α↓↓αBbB∞Z>~BB2&t*n&≡jI2
1c⊃M%%Xh($$M~⊗R~⎇∩6εQC↓1I$hP$$&,r⊃l4PH&>V"B&¬2≤a~∞12⊃)↓)αQ↓)↓R↓)↓)∩2∞1~≤a$4(HJ⊗:⊃Xh(&>-!"&¬d~1→
≤*:RJaα~⊗
"VJ∃∧"εR¬m~RJV≥"VJ∃∩2∞1~≤a~∞10h($%α↓ )↓R↓)↓)αQ↓)↓R⊃~∞14~1_4PI↓↓↓α↓↓αBbA
≠↔∂#WK∃εK⊃β;.k↔I∩b
11∪⊃%~BbA
≠↔∂#WK∃π;?K⊃αC?∂S∞a% 2∀a1IUHh($%5α1!
≡{7C3/C'Seα1βO∂.s∃/C⊗{Q9βε{';S/∪M↓#}≠Sπ1J⊃2
1c!U%%Xh(&2|zA"&"aE2B5">Q1
H4($L∩⊗≡&ph($&⎇*Q"&
b∞1~≤a~B1D~ZM"L!%2
baEU%KX4($M~⊗R~⎇∩6εQBiEI1∩Il4(HJ>VQDJ¬2BbB∞Z>~BB~2≥"n&∩jI2
1c⊃]%%Xh($&⎇*Q"&
bB1"≥2>M"∧2BRJ\J∩u%d∩11M*I%l4PH&N⊗$2>J6
!!A1∩H4($L*:⊃lhP&>V"B&¬2≤a~∞12⊃)↓)αQ↓)↓R↓)↓)∩2∞1~≤a~∞10h(%↓α↓↓↓↓∃αJ>R⎇"fB∃¬α>&:$*JM↓2α∞>6∧zV:⊃∧2⊗εR-∩∃αJ,2⊗J⊗t~⊗M 4~1~∞b2∞04PH%→ R↓)↓)αQ↓)↓R↓) ~≤a~∞15α1!
∞#∪K↔∨→ 2
baEI%0h(%↓α↓↓↓↓¬α1!
ε{';S/∪M↓#π∪?Q76+πQ7v+cQ%F{∂SπbI 2
baM]%0h(%↓α↓↓↓↓¬α1!
ε{';S/∪M↓#π∪?Q76+πQ%α1↓
βε'KMπaαCπO⊃↓→βε{';S/⊃↓#?∨#π1%⊂h($%α↓↓2
baUe%KX4(&L:}B~∀*∃α6
AαB~5∩⊗∃lhP&2>⎇↓"&⊃c 2&≥k 1E$hP$&
,:&84PH&>V"B&¬2≤a~∞15α1"∞5→"&⊃Jb
11→%%lhP$&N-"~>Jl
Q!5⊃1I%Xh($&⎇*Q"&
bB1"L1α&⊂mα~~J,)αR",q↓ A∩α⊗2N*α∞Z>~BB~B∀zn&∩jI2
1c⊃e%_hP$%↓α↓↓↓↓¬α1"&2α&⊂v∧2J⊗∃¬""⊗9α⊃A α,bN∃α≥2>M"∧2⊗εR\J∩u%d∩11Q:I%l4PH&N⊗$2>J6
!!A1∩H4($L*:⊃lhP&>V"B&¬2≤a~∞14~1→ R↓)↓)αQ↓)↓R↓) ~≤a%l4PJJ⊗2,
N∃"L %l4PJV:R,b04(L*:⊃↓∃αJNε4) l4P0aα¬∩J⊗N#X4(4QAαK↔∨#?K↔~βCK?&{SgC*βOSK.≠SWK*β≠K?jα∩N-Xh(4*LrR⊗Jt
1αNLjB2∃¬αJ>∞,"VJ∃¬αJJ⊗≥!l4(L∩⊗≡&r↓
BJ∀*NQλhP&2ε∀*1α>s l4(LJ:R⊗<*Iα&
b& 2L→2&⊃dJ∃2&:b&∞
Xh(&&2↓"&∞|*FU"¬∩⊗bQb⊃:R⊗j⊃%$⊂,rBJ=¬""⊗9¬∩⊗RV∀ql4(LJ→α↑D*J∃u9αR",qα≡=∧z9ElhP&R⊗da!C⊗{Q7K/≠S?K*⊃%l4PJ>B⊗rB&ε}<*R∞"q1
∩≤Y 1Ac⊃1A1⊃A2
∀
-E2,y%l4PJ2>>]*A"&
b*V:]~RJ}¬∩~&2*2BJ⊗E!~BJ¬α92&∩Il4(LJ→α&∩αR"⊗rα
⊗≡Lqα>V%~RI!∀2&2∃α⊃~*VtZNRI2⊃α:>"α~>Vt! ~∞bIl4(HIαJ⊗d*εN∃DJ¬%m¬
⊗Im¬
J⊗R-∩9α⊗t!l4(LJ→⊗L→αR",p4($L∩⊗≡&ph($&uαJ>}LrR&9DJ¬%lhP$&6
BB2N|J:R&rB&¬%Xh($&l
bBZ≥z&:RLq"&¬KX4($Mα2R>%z&:RLq"&¬KX4($Mα~R>%y"B25">R}LrR&9DJ¬%%ZBB∞~$zR}&u"&9"L %%lhP$&B42J⊗⊗|J:R&rB&¬%Xh($&∧2J⊗⊗|J:R&rB&¬%Xh($&L1α:B∀yz6buαJ<}∧bR>QtjεbBe!αR",p4($HJ
⊗≡Lp4($HJ6b:¬∩>⎇"uαJ=αl
aαBe">Q∃BI-MlhP$$&<B⊗J⊗{ ]l4PH$&J-"VJ8hP$%↓α↓↓↓↓αα⊗:⊂hP$&⊗t!l4*|qEh&∃∩ε-F{↓l4(Lb>>ADJ⊃1EdrBJ=c $4(HJ
⊗≡Lp4($M:"&2*α
Jε[λm
m∩α∩=αU*:.N%∩}&:¬*Q"&
aI%lhP$&Bt
6⊗nL"v}&uαVQ"L 1I%Xh($&∧b&:⊗≥Z&∩v|J:R&rB&¬%Xh($&¬2⊗JR≥Z&∩v|J:R&rB&¬%Xh($&¬αRJ2\J∩v}LrR&9DJ¬%lhP$&2|zA"&*aE2BdJ:⊗N\J∩u1
H4($HJ
⊗≡Lp4($HJ&∞∞|J:R&rB&¬%Xh($$LJ:BV"B&¬1 %l4PH$&BdJ:⊗~\J≡}&*ZBBR∀bn&∩jiFv}≥2="&uαVQ"L 1EMJIl4(HH&&:¬*Q"&
aEE%Xh($$Mα2&:+∩n&≡mz∞Z=DJ:BV"B&¬1→%%lhP$$&LrBVQDJ¬1E
Il4(HH&B2Lr⊗n&=j}∞ZzB&:B-!"&¬c M%$hP$$&,r⊂4(HJ⊗:⊃Xh(&2|zA"&"aE2B5">Q1
H4($L∩⊗≡&ph($&L~∞}&u"&9"L %l4PH&&:¬*Q"&
aEE%Xh($&∧22NR\J∩v}≥2="&uαVQ"L 1EMJIl4(HJ&:B-!"&¬c E%lhP$&B5αRJnL"v}∞4y"&:¬*Q"&
aEM%Hh($&,r⊃l4PJ&
}∧2J⊗∃∧jεaα∧2~J⊗+X4(&dz>A"L!1E2L⊃5E1
H4($L∩⊗≡&ph($&L~∞}&u"&9"L %l4PH&&:¬*Q"&
aEE%Xh($&∧2BJ>\J∩v}≥2="&uαVQ"L 1EMJIl4(HJ&:B-!"&¬c E%lhP$&B4*εRnL"v}∞4y"&:¬*Q"&
aEM%Hh($&,r⊃l4PJ&→αL→αR",qαJ⊗t
6∃"L 2:Vda1A2L⊃%l4PJJ⊗2,
N∃"L %l4PJV:R,b04(L*:⊃↓∃αJJ⊗≥! l4P0aα<*R2&t*L4(N≠K↔π&)βπK⊗gMβ}1βπ∂&K[∃β∨3Mβπv!β∂[~β≠?IπβK?∂/≠O';:βeβ␈##↔IεS?MXh(4*¬∩>∞⊗%*J∃α<*R2&t*M"N2⊗aα∀*ε1α
∩Jεe∧~Y2N3YαJ⊗4*J⊗:≤)α&:$*≡⊗I∧→2M%Xh(&
,:&84PJ&:R,:⊗IαRb-21Xh(&N2⊗aαLrR⊗≡-⊃αεJ∀
eα∞u!2∞&[ j6εDr>ZuXh(&
¬yαMαz↓Al4PJ∞:R[
v⎇AXh(&ε∃∩
2QD~:Rm∃i2∞:%YFu2l
b:>2iE%l LOOP (IA,1,MAXNOV,1) IF LVERSI[IA]>0 THEN
BEGIN "GA"
C ← C+1;
CV[C,1] ← XVCOR[IA];
CV[C,2] ← YVCOR[IA];
CI[IA] ← C;
END "GA" ELSE CI[IA] ← 0;
LOOP (IA,1,MAXNOL,1) IF LACT(IA) THEN
BEGIN "GB"
S ← S+1;
K ← IA*2;
J ← K-1;
SV[S,1] ← XLCOR[J];
SV[S,2] ← YLCOR[J];
SV[S,3] ← XLCOR[K];
SV[S,4] ← YLCOR[K];
SV[S,5] ← L ← CI[LVERCO[J]];
CNT[L] ← CNT[L]+1;
SV[S,6] ← L ← CI[LVERCO[K]];
CNT[L] ← CNT[L]+1;
SV[S,7] ← LCREDE[IA] LAND '7777
END "GB";
LOOP(IA,1,MAXNOV,1) IF ¬CNT[IA] THEN CV[IA,1]←CV[IA,2]←0;
END "GETLINES";
_ OUTLINES;
_ output active lines to disk file;
INTERNAL PROCEDURE OUTLINES;
BEGIN
INTEGER BR, C, S, I;
SAFEX REAL ARRAY CV[1:MAXNOV,1:2], SV[1:NOL*2,1:7];
TELL("output struct");
OPEN(4,"DSK",0,1,2,1000,BR,EO←1);
IF EO THEN RETURN;
ENTER(4,NAME&NOUT&".OUT",IDUM);
NOUT ← NOUT+1;
GETLINES(CV,SV,C,S);
OUT(4,CVS(S)&CL);
LOOP(IA,1,S,1)
BEGIN "OA"
SETFORMAT(15,6);
LOOP(I,1,4,1) OUT(4,CVF(SV[IA,I]));
SETFORMAT(15,0);
LOOP(I,5,7,1) OUT(4,CVF(SV[IA,I]));
OUT(4,CL);
END "OA";
OUT(4,CVS(C)&CL);
SETFORMAT(15,6);
LOOP(IA,1,C,1) OUT(4,CVS(IA)&CVF(CV[IA,1])&CVF(CV[IA,2])&CL);
RELEASE(4);
UNTELL;
END "OUTLINES";
END "SAVRES";